const Util = require('../utils/util.js')
const serverConfig = require('../../config/serverConfig.js')
const sConf = require('../../config/staticConfig.js')
const svgCaptcha = require('svg-captcha')
const multer = require('multer')

module.exports = {
    /**
    * 获取验证码
    */
    async getImgVerify(req, res, next){
        try {
            let code = svgCaptcha.create({
            size: 4,  //验证码长度
            width: 160,
            height: 40,
            background: "#f4f3f2",//干扰线条数
            noise: 2,
            fontSize: 30,
            ignoreChars: '0o1i',   //验证码字符中排除'0o1i'
            color: false // 验证码的字符是否有颜色，默认没有，如果设定了背景，则默认有 
        });
        // 保存到session,忽略大小写
        // log(code, req.session)
        req.session["randomcode"] = code.text.toLowerCase();
        req.session.save()
            return res.send(Util.renderApiData(req, res, 200, '获取验证码成功', {img: code.data}))
        } catch (err) {
            return res.status(500).send(Util.renderApiErr(req, res, 500, err))
        }
    }, 
    /**
    * 上传单附件文件
    * @param {*} req 
    * @param {*} res 
    * @param {*} next 
    */
    async uploadFile(req, res, next) {
        try {
            let query = req.query;
            query.group = Util.checkGroupId(query.group);
            // 判断是否有组织
            if(!query.group || !query.filetype || !query.name){
                return res.status(500).send(Util.renderApiErr(req, res, 500, '缺少参数:group、filetype或者name'))
            }

            if(sConf.fileName.indexOf(query.name) == -1){
                return res.status(500).send(Util.renderApiErr(req, res, 500, 'name业务 不存在'))
            }

            if(!sConf.fileType.hasOwnProperty(query.filetype)){
                return res.status(500).send(Util.renderApiErr(req, res, 500, 'filetype类型不存在'))
            }

            // 根据参数决定存放文件位置
            let lastDir = query.group+'/'+query.filetype+'/'+query.name
            let storage = multer.diskStorage(
            {
                destination: 'static/upload' + '/' + lastDir,
                fileFilter: (req, files, callback) => {
                    // 只允许上传sConf定义格式的文件
                    let type = '|' + files.mimetype.slice(files.mimetype.lastIndexOf('/') + 1) + '|'
                    let fileTypeValid = sConf.fileType[query.filetype].indexOf(type) !== -1
                    callback(null, !!fileTypeValid)
                },
                filename: (req, file, cb) => {
                    let fileFormat = (file.originalname).split(".")
                    cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1])
                }
            })
            let upload = multer({storage: storage})

            upload.single(query.name)(req, res, function (err) {
                if (err) {
                    return res.status(500).send(Util.renderApiErr(req, res, 500, err))
                }
                if (req.file) {
                    // 文件上传成功，如果开启了七牛云存储，则存储至七牛云
                    if (serverConfig.openqn) {
                        //设置上传到七牛云的文件命名
                    } else {
                        // 未开启七牛云，返回服务器上的图片链接
                        return res.send(Util.renderApiData(req, res, 200, '图片上传成功', `/upload/${lastDir}/${req.file.filename}`))
                    }
                }
            })
        } catch (err) {
          return res.status(500).send(Util.renderApiErr(req, res, 500, err))
        }
    }
}